/*
第一次修改优化了随机数,代码见 https://www.bilibili.com/read/cv11974105
第二次修改修复了输出错误，代码已删除。
第三次修改做到了下落式，代码已删除。
第四次修改修复了刷新屏幕时闪烁以及时间和规定时间内击中数量显示不正确的Bug。
类似于别踩白块禅模式,20秒电脑版。
推荐编译器(编辑器):Dev-C++(下载页面：https://lanzoux.com/imXG3gpfjej)
Dev-C++备用下载页面: https://lanzoui.com/imXG3gpfjej
Dev-C++适用于Windows7-64Bit以上。若您是XP系统请使用VC6.0以上。
*/
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
using namespace std;

void gotoxy(int x, int y) {
	COORD pos = {x, y};
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

int main() {
	cout << "请按照屏幕上的字符\"√\"按下键盘按键(1:D,2:f,3:J,4:K)\n按任意键开始游戏\n";
	getch();
	system("cls");
	int d = 0;
	time_t start = time(0);
	srand(time(0));
	int Miss = 0, Tap = 0, b[8], j[8];
	for (int i = 1; i <= 7; i++) {
		b[i] = rand() % 3;
	}
	char a[4] = {'d', 'f', 'j', 'k'}, c;
	while (time(0) - start <= 20) {
		for (int i = 1; i <= 7; i++) {
			switch (b[i]) {
				case 0:
					cout << "√ × × ×\n";
					break;
				case 1:
					cout << "× √ × ×\n";
					break;
				case 2:
					cout << "× × √ ×\n";
					break;
				case 3:
					cout << "× × × √\n";
					break;
			}
		}
		c = getch();
		if (c == a[b[7]]) {
			Tap++;
			b[7] = b[6];
			b[6] = b[5];
			b[5] = b[4];
			b[4] = b[3];
			b[3] = b[2];
			b[2] = b[1];
			b[1] = rand() % 4;
			gotoxy(0, 0);
		} else {
			d = time(0) - start;
			system("cls");
			cout << "您击错了。\n";
			break;
		}
		gotoxy(0, 0);
	}
	if (d == 0) {
		cout << "击中:" << Tap - 1 << " 耗时约20\"";
	} else {
		cout << "击中:" << Tap << " 耗时约" << d << '\"';
	}
	getch();
	getch();
}